package HashMap.Nodo.Operaciones.BloqueSwitch;

import HashMap.Nodo.Nodo;
import HashMap.Nodo.Operacion;
import HashMap.Nodo.TipoBasicoDeDatos;

public class Switch implements Operacion {

    private Nodo condiciones;
    private CasosSeleccion cuerpoSwitch;

    public Switch(Nodo condiciones, CasosSeleccion cuerpoSwitch) {
        if (condicionesSwitch()) {
            this.condiciones = condiciones;
            this.cuerpoSwitch = cuerpoSwitch;
        } else {
            throw new UnsupportedOperationException("Switch no válido");
        }
    }

    @Override
    public int getLongitud() {
        throw new UnsupportedOperationException("Operación no soportada");
    }

    @Override
    public String generarCodigoNASM() {
        return cuerpoSwitch.generarCodigoNASM(condiciones);
    }

    @Override
    public Nodo generarNodo(String tokenOperacion) {
        throw new UnsupportedOperationException("Operación no soportada");
    }

    private boolean condicionesSwitch() {
        if (condiciones.getTipoBasicoDeDatos() == TipoBasicoDeDatos.INT && condiciones.getNivelDeIndireccion() < 2) {
            return true;
        }
        return false;
    }
}
